/**
 * 研发项目常量定义文件
 * 定义统一的集合名称、状态枚举等，供前端和云函数共享使用
 */

// 集合名称定义
const COLLECTION_NAMES = {
  PROJECT: 'research_project',
  RESOURCE: 'research_project_resource',
  STATE_HISTORY: 'research_project_state_history',
  SNAPSHOT: 'research_project_snapshot',
  BRANCH: 'research_project_branch'
};

// 项目状态定义 - 严格按照状态机文档
const PROJECT_STATUS = {
  PROJECT_REVIEW: 1,  // 项目审核
  DORMANT: 2,         // 休眠
  ACTIVE: 3,          // 活动
  COMPLETED: 99       // 已完成
};

// 项目审核子状态
const PROJECT_REVIEW_SUB_STATUS = {
  DIRECTOR: 'director',           // 董事长
  RD_MANAGER: 'rd_manager',       // 研发经理
  ASSIGNMENT: 'assignment'        // 分配
};

// 休眠子状态
const DORMANT_SUB_STATUS = {
  REVIEW: 'review',               // 审核
  ARCHIVE: 'archive'              // 归档
};

// 活动状态
const ACTIVE_STATE = {
  HARDWARE_CONFIRM: 'hardware_confirm',         // 硬件确认
  HARDWARE: 'hardware',                         // 硬件
  DEBUG: 'debug',                               // 调试
  DATA_SYNC: 'data_sync',                       // 资料同步
  TESTING: 'testing',                           // 测试
  CUSTOMER_CONFIRM: 'customer_confirm',         // 客户确认
  ORDER_PREPARATION: 'order_preparation',       // 订单准备 
  PRODUCTION: 'production',                     // 生产
  PRODUCT_FEEDBACK: 'product_feedback'          // 待反馈
};

// 硬件子状态
const HARDWARE_SUB_STATE = {
  DESIGN: 'design',               // 设计
  REVIEW: 'review',               // 审核
  SAMPLE: 'sample',               // 打样
  PRODUCTION_SAMPLE: 'prod_sample', // 制样
  IN_STOCK: 'in_stock'            // 在库
};

// 测试子状态
const TESTING_SUB_STATE = {
  TESTING: 'testing',             // 测试中
  NO_TEST_REVIEW: 'no_test_review' // 免测审核
};

// 客户确认子状态
const CUSTOMER_CONFIRM_SUB_STATE = {
  DELIVERY: 'delivery',           // 寄样
  TESTING: 'testing',             // 测试
  NO_SAMPLE_REVIEW: 'no_sample_review', // 无签样审核
  SAMPLE_IN_STOCK: 'sample_in_stock',   // 样品在库
  ARCHIVE: 'archive'              // 归档
};

// 订单准备子状态
const ORDER_PREPARATION_SUB_STATE = {
  WAITING: 'waiting',             // 待量产
  REVIEW: 'review',               // 审核
  DOC_CONTROL: 'doc_control',     // 文控
  SUPPLEMENT: 'supplement',       // 补充资料
  PRE_MEETING: 'pre_meeting',     // 产前会
  PREPARATION: 'preparation'      // 生产准备
};

// 生产子状态
const PRODUCTION_SUB_STATE = {
  PRODUCING: 'producing',         // 生产中
  PE_HANDLING: 'pe_handling',     // PE处理
  RD_CHECKING: 'rd_checking',     // 研发排查
  COMPLETED: 'completed'          // 完成
};

// 项目优先级
const PROJECT_PRIORITY = {
  LOW: 1,                         // 低
  MEDIUM: 2,                      // 中
  HIGH: 3                         // 高
};

// 项目分类
const PROJECT_CATE = {
  HARDWARE: 0,                    // 硬件项目
  SOFTWARE: 1,                    // 软件项目
  INTEGRATED: 2,                  // 综合项目
  RESEARCH: 3,                    // 研究项目
  OTHER: 4                        // 其他项目
};

// 标准数据库结构定义
const PROJECT_SCHEMA = {
  // 基本标识信息
  _id: 'string|true',
  PROJECT_CODE: 'string|true|comment=项目编码',
  PROJECT_NAME: 'string|true|comment=项目名称',
  PROJECT_DESC: 'string|false|comment=项目描述',
  
  // 状态信息 (严格按照状态机定义)
  PROJECT_STATUS: 'int|true|default=1|comment=项目状态：1=项目审核,2=休眠,3=活动,99=已完成',
  PROJECT_SUB_STATUS: 'string|false|comment=子状态(如董事长、研发经理、分配等)',
  PROJECT_ACTIVE_STATE: 'string|false|comment=活动状态(如硬件确认、硬件、调试等)',
  PROJECT_ACTIVE_SUB_STATE: 'string|false|comment=活动子状态',
  
  // 状态描述和时间信息
  PROJECT_STATUS_DESC: 'string|false|comment=状态描述',
  PROJECT_STATUS_UPDATE_TIME: 'int|false|comment=状态更新时间',
  PROJECT_STATUS_EXPIRE_TIME: 'int|false|comment=状态截止时间',
  
  // 分类信息
  PROJECT_CATE: 'int|true|default=0|comment=项目分类',
  PROJECT_PRIORITY: 'int|true|default=1|comment=项目优先级：1=低,2=中,3=高',
  
  // 客户信息
  PROJECT_CUSTOMER_ID: 'string|false|comment=客户ID',
  PROJECT_CUSTOMER_NAME: 'string|false|comment=客户名称',
  PROJECT_CUSTOMER_CONTACT_NAME: 'string|false|comment=客户联系人',
  PROJECT_CUSTOMER_CONTACT_MOBILE: 'string|false|comment=客户联系电话',
  
  // 人员信息
  PROJECT_MANAGER_ID: 'string|false|comment=项目经理ID',
  PROJECT_MANAGER_NAME: 'string|false|comment=项目经理姓名',
  PROJECT_HARDWARE_OWNER_ID: 'string|false|comment=硬件负责人ID',
  PROJECT_HARDWARE_OWNER_NAME: 'string|false|comment=硬件负责人姓名',
  PROJECT_SOFTWARE_OWNER_ID: 'string|false|comment=软件负责人ID',
  PROJECT_SOFTWARE_OWNER_NAME: 'string|false|comment=软件负责人姓名',
  PROJECT_TEAM_MEMBER_IDS: 'array|true|default=[]|comment=团队成员ID数组',
  PROJECT_TEAM_MEMBER_NAMES: 'array|true|default=[]|comment=团队成员姓名数组',
  PROJECT_TEAM_MEMBER_ROLES: 'array|true|default=[]|comment=团队成员角色数组',
  
  // 时间信息
  PROJECT_START_DATE: 'int|false|comment=项目开始日期',
  PROJECT_END_DATE: 'int|false|comment=项目结束日期',
  PROJECT_PLAN_START_DATE: 'int|false|comment=计划开始日期',
  PROJECT_PLAN_END_DATE: 'int|false|comment=计划结束日期',
  
  // 进度信息
  PROJECT_PROGRESS: 'int|true|default=0|comment=项目进度：0-100',
  
  // 流转历史与日志
  PROJECT_STATE_HISTORY: 'array|true|default=[]|comment=状态变更历史',
  
  // 时间戳
  CREATE_TIME: 'int|true|comment=创建时间',
  UPDATE_TIME: 'int|true|comment=更新时间',
  
  // 废弃冗余字段(兼容老系统)
  title: 'string|false|deprecate=true',
  name: 'string|false|deprecate=true',
  status: 'int|false|deprecate=true',
  code: 'string|false|deprecate=true'
};

// 导出所有常量
module.exports = {
  COLLECTION_NAMES,
  PROJECT_STATUS,
  PROJECT_REVIEW_SUB_STATUS,
  DORMANT_SUB_STATUS,
  ACTIVE_STATE,
  HARDWARE_SUB_STATE,
  TESTING_SUB_STATE,
  CUSTOMER_CONFIRM_SUB_STATE,
  ORDER_PREPARATION_SUB_STATE,
  PRODUCTION_SUB_STATE,
  PROJECT_PRIORITY,
  PROJECT_CATE,
  PROJECT_SCHEMA
}; 